typedef struct node
{
    Value     *data;
    char    *key;
    struct node *next;
} Node;

typedef struct Hash
{
    char           node_count;
    unsigned int   hash_count;
    Node           **list;
}Map;

// 数组index
#define ArrayIndex(key,hash_count)	( key & (hash_count-1) )

// 返回 *Node
#define list(n,i)	( n[i] )

#define FindIndex(key, hash_count) ( ParseIndex(key, hash_count) )

// 检测字符串是否相等
#define EQ(s1,s2)	( strcmp(s1, s2) == 0 )

Map *CreateMap();

int SetValue(Map *format, Value * new, char * key);

Value *GetValue(Map *format, char *key);
void MapFree(Map *format);
void NodeFree(Node *list);